using Infinity.Statements.Declare;
using Infinity.Statements.Program;

namespace Infinity.Statements.Utilities
{
	public interface IScopeManager
	{
		/// <summary>
		/// Get variable from scopes by name
		/// </summary>
		IVariableStatement GetVariable(string name);

		/// <summary>
		/// It returns the current scope.
		/// </summary>
		IScope CurrentScope();

		/// <summary>
		/// It creates a new scope for statement
		/// </summary>
		IScope CreateScope(IStatement statement = null);

		void RemoveScope();

		/// <summary>
		/// Get function from scopes by name
		/// </summary>
		IProgramStatement GetFunction(string name);
	}
}